
# 生成器可使我们一次处理序列中的一个元素，它创建了一种 “虚拟序列”

def print_evens():
    for n in range(2,11,2):
        print(n)


def make_evens_gen():
    for n in range(2,11,2):
        yield n

# my_gen 是一个迭代器对象
my_gen = make_evens_gen()
for i in my_gen:
    print(i,end=' ')


# 也可将生成器转化为 列表
# 迭代器具有状态信息。到达序列末尾时，迭代器将耗尽。如我们再次使用 my_gen 而不重置，它将不再产生任何值
# 如下面的就不会再打印任何值 是一个空的列表
a_list = list(my_gen)
print(a_list)

# 可将函数调用和列表转化结合在一起，列表本身是稳定的，并且列表的值不会被迭代耗尽
b_list = list(make_evens_gen())

def make_fibo_gen(n):
    a, b = 1, 1
    while a <= n:
        yield a
        a,b = a+b,a

n = int(input('Enter number: '))
my_fibo_gen = make_fibo_gen(n)
if n in my_fibo_gen:
    print('number is a Fibonacci')
else:
    print('number is not a Fibonacci')

